//
//  ViewController.m
//  01.CoreData的简单使用
//
//  Created by J on 15/11/7.
//  Copyright © 2015年 JZJ. All rights reserved.
//
#import <CoreData/CoreData.h>
#import "ViewController.h"
#import "Employee.h"
@interface ViewController (){
    
    
    NSManagedObjectContext* _context;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

//1.创建模型文件[相当于数据库里的表]
//2.添加实体[一张表]
//3.创建实体类[相当模型]
//4.生成上下文 关联模型文件生成数据库
    /**
     关联的时候 如果本地没有数据库文件 CoreData自己会创建
     */
    

    //生成上下文
    NSManagedObjectContext* context=[[NSManagedObjectContext alloc]initWithConcurrencyType:0];//导入 #import <CoreData/CoreData.h>

    //上下文关联数据库 持久化存储调度器
    
    //持久化 将数据保存到一个文件 而不是内存
    //model模型文件
    NSManagedObjectModel* model=[NSManagedObjectModel mergedModelFromBundles:nil];
    
    NSPersistentStoreCoordinator* store=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
    
    context.persistentStoreCoordinator=store;//上下文的一个属性 持久化调度器
    
    
    //告诉coreData 数据库的名字和路径
    
    
    NSString* doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    
    NSString* sqlitePath=[doc stringByAppendingPathComponent:@"company.sqlite"];
    
    
    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil];
    _context=context;//保存
    

}

//数据库的操作 CURD    Create Update Read Delete  增删改查


//增
- (IBAction)addEmplayee{
    
    //制造数据
    
    for (int i=0; i<15; i++) {
        
        //创建员工对象
        
        
        //    Employee* emp=[[Employee alloc]init];//不能这样操作
        
        //对象关联上下文 制定实体类    Employee 直接复制model里实体的名字
        Employee* emp=[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:_context];
        emp.name=[NSString stringWithFormat:@"随机名字%d",i];
        emp.height=@(2.1+i);
        emp.birthday=[NSDate date];
  
        
        
    }
    
    
    
    //直接保存数据库
    NSError* error=nil;
    
    [_context save:&error];//由上下文来管理
    
    if (error) {
        NSLog(@"%@",error);
    }
    
    
}


//查
- (IBAction)readEmployee{
    //1.FetchRequest 抓取请求对象
    NSFetchRequest * request=[NSFetchRequest fetchRequestWithEntityName:@"Employee"];
    
    
    //模糊查询
    
    
//    NSPredicate * predic=[NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"随机名字1"];// BEGINSWITH  随机名字1开头
    
    
    
//    NSPredicate * predic=[NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"1"];// ENDSWITH 名字以@"1"结尾

    
    
//    NSPredicate * predic=[NSPredicate predicateWithFormat:@"name CONTAINS %@",@"1"];// CONTAINS 名字以包含1

    //like
//    NSPredicate * predic=[NSPredicate predicateWithFormat:@"name like %@",@"随机名字1＊"];// 随机名字1＊ 作用 BEGINSWITH  随机名字1开头相同 以 随机名字1 开头  * 通配符
    
    NSPredicate * predic=[NSPredicate predicateWithFormat:@"name like %@",@"*1"];// 1结尾

    
    
    request.predicate=predic;
    
    
    
    //身高生序排序
    NSSortDescriptor *heightSort=[NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];//升
    request.sortDescriptors=@[heightSort ];
    
    
    //4.执行请求
    
    
    
    NSError* error=nil;
    
    NSArray* result= [_context executeFetchRequest:request error:&error];//返回数组
    
    
    if (error) {
        NSLog(@"%@",error);
    }
    
    for (Employee* em in result) {
        
        
        NSLog(@"%@ %@ %@",em.name,em.height,em.birthday);
    }
    
    
    //    NSLog(@"%@",result);
    
    
    
}



//分页查询
- (void)pageSearch{
    
    
    //1.FetchRequest 抓取请求对象
    NSFetchRequest * request=[NSFetchRequest fetchRequestWithEntityName:@"Employee"];
    
    //分页查询
    //从第几行开始 起始索引
    request.fetchOffset=12;
    
    //分页的条数
    request.fetchLimit=6;   //fetch 取来  Batch 一批
    
    
    //总共有15条数据
    //每次获取6条数据
    //第一页 0 , 6
    //第二页 6 , 6
    //第三页 12 , 6
    //3.设置排序
    
    //身高生序排序
    NSSortDescriptor *heightSort=[NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];//升
    request.sortDescriptors=@[heightSort ];
    
    
    //4.执行请求
    
    
    
    NSError* error=nil;
    
    NSArray* result= [_context executeFetchRequest:request error:&error];//返回数组
    
    
    if (error) {
        NSLog(@"%@",error);
    }
    
    for (Employee* em in result) {
        
        
        NSLog(@"%@ %@ %@",em.name,em.height,em.birthday);
    }
    
    
    //    NSLog(@"%@",result);
    
}



- (IBAction)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
